<?php

namespace App\Models;

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Str;

class User extends Base
{
    // 用户管理
    protected $table = 'user';

    // 缓存字段，用于搜索绑定的字段
    protected $cacheFields = ["id", "status", "auth_way", "is_apply", "apply_type1", "apply_type2",];

    // 获取所有的用户信息
    public function getAll($where = [])
    {
        $bang     = $this->bang;
        $is_cache = $this->is_cache || $bang;
        $args     = compact('where');
        if($is_cache){
            $cacheName = $this->cacheKey('lists', $args);
            $cacheData = $this->cacheClass()->getCache($cacheName);
            if(!empty($cacheData)){
                // 检查是否已经绑定
                if(($cacheData) && (!empty($cacheData))){
                    $this->checkBangList($cacheData, $cacheName);
                }

                return $cacheData;
            }
        }

        $fields = ["id", "email", "mobile", "username", "head_img", "sex", "realname", "status", "ctime", "is_virtual",];
        $lists  = $this->where($where)->select($fields)->get()->toArray();
        $lists  = array_column($lists, null, 'id');

        // 保存为缓存
        if($is_cache){
            $this->addCacheList($lists, $cacheName, $lists, 'list');
        }

        return $lists;
    }

    // 获取多条数据（参数只有ids，因为使用in没办法缓存，所以这么操作）
    public function getOneById($id, $fields = ['*'], $pk = 'id')
    {
        if(empty($id)){
            return [];
        }
        // 如果不要缓存 直接查询
        $getOneById = true;
        $is_cache   = $this->is_cache;
        if(empty($is_cache)){
            $info = $this->select($fields)->where($pk, $id)->first();
            $info = is_object($info) ? $info->toArray() : $info;
        } else{
            // 如果缓存 则查询缓存
            $args  = compact('id', 'fields', 'pk', 'getOneById');
            $cName = $this->cacheKey('show', $args);
            $info  = $this->cacheClass()->getCache($cName);
            // 检查是否已经绑定
            if($info){
                $this->checkBangShow($info, $cName);
            }

            if(empty($info)){
                // 查询
                $info = $this->where($pk, $id)->select($fields)->first();
                $info = is_object($info) ? $info->toArray() : $info;
                $this->addCacheShow($info, $cName, $info);
            }
        }

        // 各种查询后的操作

        // 1、头像
        // 2、认证类型


        return $info;
    }

    // 检查唯一性
    public function checkUser($data, $id = '')
    {

        $where = [];
        // username 唯一性
        /*if(!empty($data['username'])){
            $yzwhere = [['username', '=', $data['username']], ['status', '>=', 0]];
            if($id){
                $where = [['id', '<>', $id]];
            }
            $info = $this->where($where)->where($yzwhere)->first();
            if($info){
                return $this->return_false('该用户名已经存在！');
            }
        }*/


        // email 唯一性
        if(!empty($data['email'])){
            $yzwhere = [['email', '=', $data['email']], ['status', '>=', 0]];
            if($id){
                $where = [['id', '<>', $id]];
            }
            $info = $this->where($where)->where($yzwhere)->first();
            if($info){
                return $this->return_false('该邮箱已经存在！');
            }
        }

        // mobile 唯一性
        if(!empty($data['mobile'])){
            $yzwhere = [['mobile', '=', $data['mobile']], ['status', '>=', 0]];
            if($id){
                $where = [['id', '<>', $id]];
            }
            $info = $this->where($where)->where($yzwhere)->first();
            if($info){
                return $this->return_false('该手机号已经存在！');
            }
        }

        return $data;
    }

    // 添加验证
    public function checkData($data, $where = [])
    {
        // 随机码
        if($where && empty($data['password'])){
            unset($data['password']);
        } else{
            $salt = Str::random(4);
            if(empty($data['password'])){
                $data['password'] = 123456;
            }
            // 密码
            $data['salt']     = $salt;
            $data['password'] = $this->add_md5($data['password'], $salt);
        }

        // 整理角色
        if(empty($data['role'])){
            unset($data['role']);
        } else{
            $data['role'] = json_encode($data['role'], 1);
        }

        return $data;
    }

    // 登录
    public function login($username, $password, $loginField = 'username')
    {
        // 获取用户信息
        $field = ['id', 'username', 'password', 'salt', 'email', 'status', 'mobile', 'nickname',];
        $info  = $this->where([$loginField => $username])->select($field)->first(); // ->recycle()
        if(empty($info)){
            return $this->return_false('用户不存在！！');
        }
        if($info->status === 0){
            return $this->return_false('用户被禁止登录！！');
        }

        // 验证密码
        /*$password = $this->add_md5($password, $info->salt);
        if($info->password != $password){
            return $this->return_false('密码错误！！');
        }*/
        if(!$this->ckeckPassword($password, $info->salt, $info['password'])){
            return $this->return_false('密码错误！！');
        }

        // 登录成功
        $user     = ['id' => $info->id, 'username' => $info->username, 'email' => $info->email, 'mobile' => $info->mobile];
        $onlineip = request()->ip();
        $updata   = ['last_ip' => $onlineip, 'last_time' => time(),];
        DB::beginTransaction();
        try{
            $rst = $this->where('id', $info->id)->update($updata);

            // 提交事务
            DB::commit();
        } catch(\Exception $e){
            // 回滚事务
            DB::rollback();

            return $this->return_false($this->getError());
        }

        return $user;
    }

    // 加密密码
    public function add_md5($password, $salt = '')
    {
        //return md5($password.'|'.$salt);
        return password_hash($password.$salt, PASSWORD_DEFAULT);
    }

    // 解密
    public function ckeckPassword($password, $salt, $hash)
    {
        return password_verify($password.$salt, $hash);
    }

    // 创建系统用户
    // 1:虚拟用户
    // 2:系统用户
    // 3:公众号或者采集的用户
    public function addSysUser($usertype, $realname, $is_auth = true, $description = '')
    {
        // 参数
        //$realname = '中国证券网报';
        if(empty($description)){
            $description = $realname;
        }

        // 1:虚拟用户 $maxUid=13000;
        // 2:系统用户 $maxUid=12000;
        // 3:公众号或者采集的用户  $maxUid=14000;
        if(!in_array($usertype, [1, 2, 3])){
            return $this->return_false('请指定虚拟用户内心');
        }

        // 组合sql
        $userDb = $this;
        $veriDb = new UserVerify();
        $modiDb = new UserModify();
        $time   = LARAVEL_TIME;
        $img    = rand(1, 75);
        $head   = '/static/sys_head_img/face_'.$img.'.jpg';

        // 判断是否已经存在
        $info = $userDb->where('realname', $realname)->first();
        if(!empty($info)){
            return $this->return_false('该用户已经存在！');
        }

        // 判断未来的uid
        $maxUid = 14000;
        if($usertype == 1){
            $maxUid = 13000;
        } elseif($usertype == 2){
            $maxUid = 12000;
        } elseif($usertype == 3){
            $maxUid = 14000;
        }

        $uid = $userDb->where('id', '<', $maxUid)->max('id');
        if(empty($uid)){
            return $this->return_false('生成用户编号id失败！');
        }
        $minUid = $maxUid - 1000;
        if($uid < $minUid){
            $uid = $minUid + 1;
        }

        // 组合各种参数
        $uid        = $uid + 1;
        $mobile     = '280868'.$uid;
        $apply_type = 23;
        $areas      = '[]';
        $position   = $realname.'官方账号';

        // 添加
        $user = [
            'id'          => $uid,
            'mobile'      => $mobile,
            'username'    => $realname,
            'city'        => '成都市',
            'is_virtual'  => $usertype,
            'ctime'       => $time,
            'mtime'       => $time,
            'head_img'    => '/static/sys_head_img/face_'.$img.'.jpg',
            'realname'    => $realname,
            'is_apply'    => 0,
            'apply_type1' => 0,  // ?1
            'apply_type2' => 0,  // ?1
            'position'    => '',    // ?2
            'verify'      => 0,
            'auth_way'    => '0',


        ];
        // 重新赋值
        $modify = [
            'uid'         => $uid,
            'invite_code' => $uid,
            'description' => $description,     // ?3
            'city'        => '成都市',
            'ctime'       => $time,
            'mtime'       => $time,
            'files'       => '[]',
            'links'       => '[]',
        ];
        // 认证
        $verify = [];
        if($is_auth){
            // 添加
            $user['auth_way']    = 2;
            $user['is_apply']    = 1;
            $user['apply_type1'] = $apply_type;
            $user['apply_type2'] = 0;
            $user['position']    = $position;
            $user['verify']      = 1;
            // 重新赋值
            $modify['position'] = $position;
            $modify['areas']    = $areas;
            // 认证
            $verify = [
                'uid'           => $uid,
                'apply_type1'   => $apply_type,      // ?1
                'apply_type2'   => 0,      // ?1
                'realname'      => $realname,
                'position'      => $position,        // ?2
                'audit_content' => '系统用户',
                'areas'         => $areas,           // ?4
                'description'   => $description,     // ?3
                'files'         => '[]',
                'links'         => '[]',
                'verify'        => 1,
                'ctime'         => $time,
                'mtime'         => $time,
                'auth_way'      => '2',
            ];
        }

        // 执行sql
        DB::beginTransaction();
        try{
            // 保存用户主表
            $uid = $userDb->insertGetId($user);
            // 保存附表与审核
            $uid3 = $modiDb->insertGetId($modify);
            if($verify){
                $uid2 = $veriDb->insertGetId($verify);
            }

            DB::commit();
        } catch(\Exception $e){
            DB::rollBack();

            return $this->return_false($e->getMessage());
        }

        // 缓存操作
        $userDb->deleteCacheShow($user);
        $modiDb->deleteCacheShow($modify, ['uid' => $uid]);
        $veriDb->deleteCacheShow($verify);

        return $uid;
    }

    // 详情
    public function oneFind($where, $order = "id DESC")
    {
        // 获取缓存
        $is_cache = $this->is_cache || $this->bang;
        $args     = compact('where', 'order');
        if($is_cache){
            $cacheName = $this->cacheKey('show', $args);
            $info      = $this->cacheClass()->getCache($cacheName);
        }

        // 查询
        if(empty($info)){
            $query = $this->where($where);
            if(is_array($order)){

            } else{
                $order = explode(" ", $order);
                $query = $query->orderby($order[0], $order[1]);
            }
            $info = $query->first(); // ->recycle()
            if(empty($info)){
                return $this->return_false('数据不存在！！');
            }

            // 查询附件
            $modify = (new UserModify())->where('uid', $info->id)->first();
            $modify = $modify ? $modify->toArray() : [];
            $info   = $info->toArray();
            $info   = array_merge($modify, $info);

            // 保存为缓存
            if($is_cache){
                $this->addCacheShow($info, $cacheName, $info);
            }
        }

        return $info;
    }

    // 添加
    public function oneAdd($data = [])
    {
        // 验证信息
        /*$rules  = $this->fieldRule();
        $result = $this->validator($data, $rules, ['id' => '修改的用户编号']);
        if($result === false){
            return false;
        }*/

        // 模型 和 查询
        $fUid   = $data['from_uid'] ?? 0;
        $modify = new UserModify();
        $data1  = $this->filterField($data);
        $data2  = $modify->filterField($data);
        $this->fill($data1);
        $modify->fill($data2);

        // 认证信息
        if(!empty($data['is_apply'])){
            $verifyDb   = new UserVerify();
            $verifyData = $verifyDb->filterField($data);
        }

        // 如果有邀请人
        if($fUid){
            $invite   = new UserInvite();
            $UNumbers = ['invite_no' => DB::raw('invite_no + 1')];
            $numCache = ['invite_no' => '+1'];
        }

        // 或者
        //$data   = $model->fillableFromArray($data);
        //$result = $model->save($data);
        // 保存数据
        DB::beginTransaction();
        try{
            // 主表
            $result = $this->save();
            $uid    = $this->id;
            // 组合
            $modify->uid = $uid;
            // 附表
            $result = $modify->save();
            // 增加邀请人的数量
            if($fUid){
                $modify->where('uid', $fUid)->update($UNumbers);
                // 邀请记录
                $inData = ['uid' => $fUid, 'invite_uid' => $uid, 'status' => 1];
                $invite->fill($inData);
                $result = $invite->save();
            }

            // 如果有审核
            if(!empty($verifyData)){
                $verifyData['uid'] = $uid;
                $verifyDb->fill($verifyData);
                $result = $verifyDb->save();
            }

            // 发布消息 新人报到：各位朋友，大家好！我是刘旭，很高兴加入深蓝社区和大家交流。

            DB::commit();
        } catch(\Exception $e){
            DB::rollBack();

            return $this->return_false($e->getMessage());
        }

        // 缓存操作
        $this->deleteCacheShow($data);
        $modify->deleteCacheShow($data2, ['uid' => $uid]);
        if($fUid){
            $invite->deleteCacheShow($inData);
            $this->reSaveCache($fUid, $numCache);
        }

        return $this->id;
    }

    // 修改
    public function oneEdit($where, $data)
    {
        // 验证信息
        $rules  = $this->fieldRule();
        $result = $this->validator($data, $rules, ['id' => '修改的用户编号']);
        if($result === false){
            return false;
        }

        $info = $this->where($where)->first();  // ->recycle()
        if(empty($info)){
            return $this->return_false('你要修改的数据不存在！！');
        }
        if(empty($data['uid'])){
            $data['uid'] = $info->id;
        }

        // 保存
        $modiDb = new UserModify();
        $modify = $modiDb->where(['uid' => $data['uid']])->first();  // ->recycle()
        $data1  = $this->filterField($data);
        $data2  = $modify->filterField($data);
        $info->fill($data1);
        if($data2){
            $modify->fill($data2);
        }

        // 认证信息
        // TODO 修改暂不审核
        if(!empty($data['is_apply'])){
            $verifyDb   = new UserVerify();
            $verifyData = $verifyDb->filterField($data);
        }


        // 或者
        //$data   = $model->fillableFromArray($data);
        //$result = $model->where($where)->update($data);

        // 保存数据
        DB::beginTransaction();
        try{
            // 主表
            $result = $info->save();
            // 附表
            if($data2){
                $result = $modify->save();
            }

            // 如果有审核
            // TODO 修改暂不审核
            /*if(!empty($verifyData)){
                $verifyDb->fill($verifyData);
                $result = $verifyDb->save();
            }*/

            DB::commit();
        } catch(\Exception $e){
            DB::rollBack();

            return $this->return_false($e->getMessage());
        }

        // 缓存操作
        $this->deleteCacheShow($info, $data);
        $modiDb->deleteCacheShow($modify, $data);

        return $result;
    }

    // 注销
    public function cancel($uid)
    {
        // 查询（用于缓存操作）
        $freshDb = new Fresh();
        $newsDb  = new News();
        $disDb   = new Dispatch();
        $needDb  = new Need();
        $eventDb = new Event();

        // 查询该用户的快讯（用于修改快讯的缓存）（暂无）
        // 查询该用户的新闻（用于修改新闻的缓存）
        // 查询该用户的长短文（用于修改长短文的缓存）
        $dispatch = $disDb->where('uid', $uid)->get()->toArray();
        $news     = $newsDb->where('uid', $uid)->get()->toArray();
        $fresh    = $freshDb->where('uid', $uid)->get()->toArray();
        $need     = $needDb->where('uid', $uid)->get()->toArray();
        $event    = $eventDb->where('uid', $uid)->get()->toArray();

        // 被转发的
        $dispatchIds = array_column($dispatch, 'id');
        $newsIds     = array_column($news, 'id');
        $freshIds    = array_column($fresh, 'id');
        $needIds     = array_column($need, 'id');
        $eventIds    = array_column($event, 'id');
        $zDispatch   = $disDb->whereIn('dispatch_id', $dispatchIds)->get()->toArray();
        $zNews       = $newsDb->whereIn('news_id', $newsIds)->get()->toArray();
        $zFresh      = $freshDb->whereIn('parent_id', $freshIds)->get()->toArray();
        $zNeed       = $needDb->whereIn('need_id', $needIds)->get()->toArray();
        $zEvent      = $eventDb->whereIn('event_id', $eventIds)->get()->toArray();
        $zIds        = array_merge(array_column($zDispatch, 'id'), array_column($zNews, 'id'), array_column($zFresh, 'id'), array_column($zNeed, 'id'), array_column($zEvent, 'id'),);

        // 查询该用户的评论的快讯（用于修改快讯的评论数）（暂无）
        // 查询该用户的评论的新闻（用于修改新闻的评论数）
        // 查询该用户的评论的长短文（用于修改长短文的评论数）
        $comments = DB::table('article_comment')->where('uid', $uid)->get()->toArray();

        // 查询该用户的点赞的快讯（用于修改快讯的点赞数）（暂无）
        // 查询该用户的点赞的新闻（用于修改新闻的点赞数）
        // 查询该用户的点赞的长短文（用于修改长短文的点赞数）
        $behaviors = DB::table('article_behavior')->where('uid', $uid)->get()->toArray();

        // 查询该用户的收藏的快讯（用于修改快讯的收藏数）（暂无）
        // 查询该用户的收藏的新闻（用于修改新闻的收藏数）
        // 查询该用户的收藏的长短文（用于修改长短文的收藏数）
        $collects = DB::table('article_collect')->where('uid', $uid)->get()->toArray();


        // 查询该用户的浏览的快讯（用于修改快讯的浏览数）（暂无）
        // 查询该用户的浏览的新闻（用于修改新闻的浏览数）
        // 查询该用户的浏览的长短文（用于修改长短文的浏览数）
        $views = DB::table('article_view')->where('uid', $uid)->get()->toArray();

        // 需要删除的缓存
        $delComment  = [];
        $delBehavior = [];
        $delCollect  = [];

        DB::beginTransaction();
        try{

            // 删除用户
            $this->where('id', $uid)->update(['status' => -1]);

            // 删除该用户的长短文
            // 删除该用户的新闻
            // 删除该用户的快讯（暂无）
            // 删除该用户的发布的活动
            // 删除该用户的发布的需求
            $newsDb->where('uid', $uid)->update(['verify' => -1]);
            $freshDb->where('uid', $uid)->update(['verify' => -1]);
            $disDb->where('uid', $uid)->update(['verify' => -1]);
            $needDb->where('uid', $uid)->update(['verify' => -1]);
            $eventDb->where('uid', $uid)->update(['verify' => -1]);

            // 删除转发
            $freshDb->whereIn('id', $zIds)->update(['verify' => -1]);


            // 删除该用户的长短文评论
            // 删除该用户的新闻评论
            // 删除该用户的快讯评论（暂无）
            // 删除该用户的发布的活动评论
            // 删除该用户的发布的需求评论
            DB::table('article_comment')->where('uid', $uid)->update(['verify' => -1]);
            DB::table('need_comment')->where('uid', $uid)->update(['verify' => -1]);
            DB::table('event_comment')->where('uid', $uid)->update(['status' => -1]);

            // 修改长短文评论数
            // 修改新闻评论数
            // 修改快讯评论数（暂无）
            // 修改活动评论数
            // 修改需求评论数
            foreach($comments as $_comment){
                $delComment[] = ['id' => $_comment['article_id']];
                if(in_array($_comment['channel'], ['news', 'fresh', 'need', 'event', 'dispatch'])){
                    $_updateComment = ['comment_no' => DB::raw("comment_no - 1")];
                    DB::table($_comment['channel'])->where('id', $_comment['article_id'])->update($_updateComment);
                }
            }

            // 删除该用户的长短文点赞
            // 删除该用户的新闻点赞
            // 删除该用户的快讯点赞（暂无）
            // 删除该用户的活动点赞
            // 删除该用户的需求点赞
            DB::table('article_behavior')->where('uid', $uid)->update(['status' => 0]);


            // 修改长短文点赞数
            // 修改新闻点赞数
            // 修改快讯点赞数（暂无）
            // 修改活动点赞数
            // 修改需求点赞数
            foreach($behaviors as $_behavior){
                $delBehavior[] = ['id' => $_behavior['article_id']];
                if(in_array($_behavior['channel'], ['news', 'fresh', 'need', 'event', 'dispatch'])){
                    $_updateBehavior = ['praise_no' => DB::raw("praise_no - 1")];
                    DB::table($_behavior['channel'])->where('id', $_behavior['article_id'])->update($_updateBehavior);
                }
            }

            // 删除该用户的长短文收藏
            // 删除该用户的新闻收藏
            // 删除该用户的快讯收藏（暂无）
            // 删除该用户的活动收藏
            // 删除该用户的需求收藏
            DB::table('article_collect')->where('uid', $uid)->update(['status' => 0]);

            // 修改长短文收藏数
            // 修改新闻收藏数
            // 修改快讯收藏数（暂无）
            // 修改活动收藏数
            // 修改需求收藏数
            foreach($collects as $_collect){
                $delCollect[] = ['id' => $_collect['article_id']];
                if(in_array($_collect['channel'], ['news', 'fresh', 'need', 'event', 'dispatch'])){
                    $_updateCollect = ['collect_no' => DB::raw("collect_no - 1")];
                    DB::table($_collect['channel'])->where('id', $_collect['article_id'])->update($_updateCollect);
                }
            }


            // 删除该用户的长短文浏览记录
            // 删除该用户的新闻浏览记录
            // 删除该用户的快讯浏览记录（暂无）
            // 删除该用户的浏览记录
            // 删除该用户的浏览记录
            DB::table('article_view')->where('uid', $uid)->delete();

            // 修改长短文浏览数
            // 修改新闻浏览数
            // 修改快讯浏览数（暂无）
            // 修改活动浏览数
            // 修改需求浏览数
            foreach($views as $_view){
                if(in_array($_view['channel'], ['news', 'fresh', 'need', 'event', 'dispatch'])){
                    $_updateView = ['collect_no' => DB::raw("collect_no - 1")];
                    DB::table($_view['channel'])->where('id', $_view['article_id'])->update($_updateView);
                }
            }

            DB::commit();
        } catch(\Exception $e){
            DB::rollBack();

            return $this->return_false($e->getMessage());
        }


        // 缓存整理：
        // 用户缓存
        $this->deleteCacheShow(['id' => $uid]);

        // 长短文缓存
        // 新闻缓存
        // 快讯（暂无）
        // 需求缓存
        // 活动缓存
        $freshDb->deleteCacheList($fresh);
        $newsDb->deleteCacheList($news);
        $disDb->deleteCacheList($dispatch);
        $needDb->deleteCacheList($need);
        $eventDb->deleteCacheList($event);

        // 长短文缓存的转发
        // 新闻缓存的转发
        // 快讯的转发（暂无）
        // 需求缓存的转发
        // 活动缓存的转发
        $freshDb->deleteCacheList($zFresh);
        $freshDb->deleteCacheList($zNews);
        $freshDb->deleteCacheList($zDispatch);
        $freshDb->deleteCacheList($zNeed);
        $freshDb->deleteCacheList($zEvent);

        // 长短文评论缓存
        // 新闻评论缓存
        // 快讯评论缓存（暂无）
        // 需求评论缓存
        // 活动评论缓存
        (new ArticleComment())->deleteCacheList($comments);

        // 长短文点赞缓存
        // 新闻点赞缓存
        // 快讯点赞缓存（暂无）
        (new ArticleBehavior())->deleteCacheList($behaviors);

        // 长短文收藏缓存
        // 新闻收藏缓存
        // 快讯收藏缓存（暂无）
        (new ArticleCollect())->deleteCacheList($collects);

        // 长短文浏览记录缓存
        // 新闻浏览记录缓存
        // 快讯浏览记录缓存（暂无）
        (new ArticleView())->deleteCacheList($views);


        //    评论数
        $freshDb->deleteCacheList($delComment);
        $newsDb->deleteCacheList($delComment);
        $disDb->deleteCacheList($delComment);
        $needDb->deleteCacheList($delComment);
        $eventDb->deleteCacheList($delComment);

        //    浏览数
        //    点赞数
        $freshDb->deleteCacheList($delBehavior);
        $newsDb->deleteCacheList($delBehavior);
        $disDb->deleteCacheList($delBehavior);
        $needDb->deleteCacheList($delBehavior);
        $eventDb->deleteCacheList($delBehavior);

        //    收藏数
        $freshDb->deleteCacheList($delCollect);
        $newsDb->deleteCacheList($delCollect);
        $disDb->deleteCacheList($delCollect);
        $needDb->deleteCacheList($delCollect);
        $eventDb->deleteCacheList($delCollect);

        // TODO 以后在添加的该用户的相关信息

        return true;
    }

    // 定义验证操作
    public function rules()
    {
        $add = [
            'mobile' => 'required',
            //'salt'  => 'required',
        ];

        $edit = [
        ];

        $info = [
            //'surname'  => 'required',
            //'realname' => 'required',
        ];


        $rule = [
            //'id' => 'numeric',
            //'email'    => 'required',
            //'mobile' => 'numeric',
            //'nickname' => 'required',
            //'username' => 'required',
            //'password' => 'required',
            //'salt'     => 'required',
            //'sex'      => 'numeric',
            //'surname'  => 'required',
            //'realname' => 'required',
            //'facebook' => 'required',
            //'twitter'  => 'required',
            //'signature' => 'required',
            //'head_img' => 'required',
            //'article_no' => 'numeric',
            //'last_time' => 'numeric',
            //'last_ip' => 'required',
            'status' => ['in:0,1,2'],
        ];


        $msg = [
            'id'           => '编号',
            'score'        => '积分',
            'username'     => '用户名',
            'password'     => '密码',
            'realname'     => '真实姓名',
            'head_img'     => '头像',
            'phone'        => '电话',
            'email'        => '邮箱',
            'itype'        => '类型（普通公众、实习生、企业、媒体等）',
            'channel'      => '类型渠道（媒体（传统体制内媒体）、社会化媒体（自媒体、民营资本媒体）、法人认证、学术机构、人员认证、券商研究）',
            'sex'          => '0-保密1-男 2-女',
            'is_recommend' => '推荐 1-是',
            'is_index'     => '首页推荐  1-是',
            'is_apply'     => '是否申请认证',
            'apply_type1'  => '申请类型（媒体、企业、实习生）',
            'apply_type2'  => '申请类型（媒体、企业、实习生）',
            'mobile'       => '手机号',
            'dtTime'       => '',
            'dtLast'       => '',
            'idBangDing'   => '',
            'mediaID'      => '',
            'mediaUserID'  => '',
            'is_auth'      => '是否认证手机号（1-是）',
            'verify'       => '是否审核（1-是）',
            'status'       => '用户状态 1-正常 0-禁用',
            'is_del'       => '是否删除（1-是）',
            'ctime'        => '创建时间',
            'mtime'        => '修改时间',
        ];

        return ['rule' => $rule, 'msg' => $msg, 'add' => $add, 'info' => $info];
    }

}
